package com_briup;

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello Test");
        Test test = new Test();
        String filePath = "src/main/java/com_briup/class.xml";
        test.domParse(filePath);
    }
    //使用dom解析方式 解析xml文件
    public void domParse(String filePath) {
        //1.创建解析类工厂的对象
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        try {
            //2.通过工厂创建解析器对象
            DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
            //3.解析xml文件
            Document document = documentBuilder.parse(filePath);
            //4.获取根元素
            Element root = document.getDocumentElement();
//            System.out.println("根元素："+root);
            //5.获取根元素下面所以的子节点(儿子节点)
            NodeList childNodes = root.getChildNodes();
            //遍历子节点列表
            for (int i = 0; i < childNodes.getLength(); i++) {
                //获取当前处理的子节点
                Node node = childNodes.item(i);
                //判断节点的类型，是文本节点还是元素节点
//                System.out.println(node.getNodeName());
//                System.out.println(node.getNodeType());
//                System.out.println(node.getNodeName());

                //1 元素 3 文本
                //只获取元素节点
                if (node.getNodeType()==1) {
//                    System.out.println(node.getNodeType());
//                    System.out.println(node.getNodeName());
                    //获取当前元素节点中的所有属性
                    NamedNodeMap attributes = node.getAttributes();
                    //循环变量拿到每一个属性
                    for (int j = 0; j < attributes.getLength(); j++) {
                        //强制转换为Attr类型的对象，表示属性
                        Attr attr = (Attr) attributes.item(j);
                        //可以通过方法获取到属性名和属性值
                        String attrName = attr.getNodeName();
                        String attrValue = attr.getNodeValue();
                        System.out.println("attrName"+attrName);
                        System.out.println("attrValue"+attrValue);
                    }
                    //获取当前节点下面的子节点
                    NodeList nodeList = node.getChildNodes();
                    for (int k = 0; k < nodeList.getLength(); k++) {
                        Node item = nodeList.item(k);
                        //判断子节点是不是元素
                        if (item.getNodeType()==Node.ELEMENT_NODE) {
                            //获取节点名
                            String nodeName = item.getNodeName();
                            String nodeText = item.getTextContent();
                            System.out.println("nodeName"+nodeName);
                            System.out.println("nodeText"+nodeText);

                        }
                    }
                    }



                }
//                switch (node.getNodeType()){
//                    case Node.TEXT_NODE:
//                        System.out.println("文本节点内容："+node.getTextContent());
//                        break;
//                    case Node.ELEMENT_NODE:
//                        System.out.println("元素节点名字: "+node.getNodeName());
//                        //获取当前元素节点中的所有属性
//                        NamedNodeMap attributes = node.getAttributes();
//                        //循环变量拿到每一个属性
//                        for (int j = 0; j < attributes.getLength(); j++) {
//                            //强制转换为Attr类型的对象，表示属性
//                            Attr attr = (Attr)attributes.item(j);
//                            //可以通过方法获取到属性名和属性值
//                            System.out.println(attr.getName()+" = "+attr.getValue());
//                        }


                        //获取当前节点下面的子节点
//                        NodeList nodeList = node.getChildNodes();
//                        for (int k = 0; k < nodeList.getLength(); k++){
//                            Node item = nodeList.item(k);
//                            //如果这个节点是元素节点的话
//                            if(item.getNodeType()==Node.ELEMENT_NODE){
//                                //拿出元素节点的名字和它的文本值
//                                System.out.println(item.getNodeName()+" = "+item.getTextContent());
//                            }
//                        }
//                        break;
//                        default:
//                            throw new RuntimeException("解析到意外的节点类型:"+node);
//                }
//            }
        }catch (Exception e){
            e.printStackTrace();
        }

}
}
